package LeetCode;

import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;

/**
 * @author VX5
 * @Title: MJC
 * @ProjectName interview
 * @Description: TODO
 * @date ${DAT}11:18
 */
public class LeetCode459 {
    public boolean repeatedSubstringPattern(String s) {
        // i为子串长度，这步类似于寻找s.length的因数
        for(int i = 1; i < s.length(); ++i){
            // 如果i为s.length，再判断该长度的子串是否可以多次构成原字符串
            if(s.length()%i == 0){// 表示以i为长度的子串能够被整个字符串划分
                // t为长度为i的子串
                String t = s.substring(0, i);// 注意这里是左闭右开的返回，不是截取右边的字符
                boolean flag = true;
                // 将长度为i的子串t与字符串s比较，比较的间隔为i
                for(int j = i; j + i <= s.length(); j += i){
                    if(!t.equals(s.substring(j, j + i))){// 这里是与接着（0，i）的字符串（j + i）
                        // 如果构成失败，return false
                        flag = false;
                        break;
                    }
                }
                if(flag) return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        System.out.println(new LeetCode459().repeatedSubstringPattern2("abac"));
    }

    public boolean repeatedSubstringPattern2(String s){
        // 首先确定以i为截取长度
        for (int i = 1; i < s.length(); i++){
            // 首先看这个长度能不能将原字符串均等划分
            if (s.length() % i != 0){
                continue;
            }
            // 进行分割
            String t = s.substring(0,i);// 左闭右开
            // 进行分割字段后续的比较
            boolean flag = true;
            for (int j = i; j + i <= s.length(); j += i){// j每次增加的是i的长度，把所有分好的段落全部与t比较
                if (!t.equals(s.substring(j, j + i))){
                    flag = false;
                    break; // 有一段不一样就直接退出
                }
            }
            if (flag){
                return true;
            }
        }
        return false;
    }
}
